package gestionOrdres;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import metiers.Axe;
import metiers.Concept;
import metiers.typeAssociationConcept;

import com.csvreader.CsvReader;

/* Necessite la librairie javacsv.jar, qu'on peut trouver ici :
 * 
 * http://mirrors.ibiblio.org/pub/mirrors/maven2/net/sourceforge/javacsv/javacsv/2.0/javacsv-2.0.jar
 * 
 */

public class LectureCsv {
	
	/** La liste des association */
	private List<Axe> OntologieContext;

	/** la liste des concepts */
	private List<Concept> listContextConcept;

	public LectureCsv() {

		OntologieContext = new ArrayList<Axe>();
		listContextConcept = new ArrayList<Concept>();

	}
	
	public void lireCsvConcepts(String file) {

		String folder = System.getProperty("pfe.batchResult.dir");
		// String file = "requete_concept_info.csv";

		try {

			CsvReader fichier = new CsvReader(new FileReader(folder + file));

			fichier.readHeaders();
			fichier.readRecord();

			// La première ligne du fichier concerne le concept principal

			String nomConceptPrincipal = fichier.get(0);
			
			int effectifPrinc = Integer.parseInt(fichier.get(2));

			Concept conceptPrinc = new Concept(nomConceptPrincipal);
			
			conceptPrinc.setEffectifTotalPrinc(effectifPrinc);
			conceptPrinc.setEffectifTotalComp(0);

			listContextConcept.add(conceptPrinc);

			// On traite ensuite les concepts complémentaires
			while (fichier.readRecord()) {
				String nomConcept = fichier.get(0);
				int effectif = Integer.parseInt(fichier.get(2));

				Concept concept = new Concept(nomConcept);
				concept.setEffectifTotalComp(effectif);
				concept.setEffectifTotalPrinc(0);

				listContextConcept.add(concept);

			}

			fichier.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void lireCsvPrincipal(String file) {

		String folder = System.getProperty("pfe.batchResult.dir");
		// String file = "requete_principal.csv";

		try {

			CsvReader fichier = new CsvReader(new FileReader(folder + file));

			fichier.readHeaders();

			while (fichier.readRecord()) {
				String nomConcept1 = fichier.get(0);
				String nomConcept2 = fichier.get(1);
				double stat = Double.parseDouble(fichier.get(2));
				int valM = Integer.parseInt(fichier.get(3));

				Concept concept1 = new Concept(nomConcept1);
				Concept concept2 = new Concept(nomConcept2);
				
				int indexConcept1 = listContextConcept.indexOf(concept1);
				
				int indexConcept2 = listContextConcept.indexOf(concept2);
				
				System.out.println(indexConcept2);
				
				Axe assoc = new Axe(listContextConcept.get(indexConcept1), listContextConcept.get(indexConcept2),
						typeAssociationConcept.Principal, stat, valM);
				
			
				
				OntologieContext.add(assoc);

			}

			fichier.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void lireCsvComplementaire(String file) {

		String folder = System.getProperty("pfe.batchResult.dir");
		// String file = "requete_complementaire.csv";

		try {

			CsvReader fichier = new CsvReader(new FileReader(folder + file));

			fichier.readHeaders();

			while (fichier.readRecord()) {
				String nomConcept1 = fichier.get(0);
				String nomConcept2 = fichier.get(1);
				double stat = Double.parseDouble(fichier.get(2));
				int valM = Integer.parseInt(fichier.get(3));

				Concept concept1 = new Concept(nomConcept1);
				Concept concept2 = new Concept(nomConcept2);
				
				int indexConcept1 = listContextConcept.indexOf(concept1);
				int indexConcept2 = listContextConcept.indexOf(concept2);

				Axe assoc = new Axe(listContextConcept.get(indexConcept1), listContextConcept.get(indexConcept2),
						typeAssociationConcept.Complementaire, stat, valM);
				
				System.out.println("eff comp " + assoc.getConcept().getEffectifTotalComp());

				OntologieContext.add(assoc);

			}

			fichier.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void afficherAssoc() {
		for (int i = 0; i < OntologieContext.size(); i++) {
			Axe axe = OntologieContext.get(i);
			System.out.println("Concept :" + axe.getConcept().getNom() + ", "
					+ "Concept concerné " + axe.getConceptAssocie().getNom()
					+ " type : "
					+ axe.getTypeAssociation() + " stat: " + axe.getStatistiqueX2());
		}
	}

	public List<Axe> getOntologieContext() {
		return OntologieContext;
	}

	public void setOntologieContext(List<Axe> ontologieContext) {
		OntologieContext = ontologieContext;
	}

	public List<Concept> getListContextConcept() {
		return listContextConcept;
	}

	public void setListContextConcept(List<Concept> listContextConcept) {
		this.listContextConcept = listContextConcept;
	}

	public void afficherConcepts() {
		for (int i = 0; i < listContextConcept.size(); i++) {
			Concept concept = listContextConcept.get(i);
			System.out.println("Concept :" + concept.getNom());
		}
	}

//	public static void main(String[] args) {
//		LectureCsv l = new LectureCsv();
//
//		l.lireCsvPrincipal("requete-principal-2.csv");
//		l.lireCsvComplementaire("requete_complementaire-2.csv");
//		l.afficherAssoc();

//		l.lireCsvConcepts("requete_concept_info.csv");
//		l.afficherConcepts();

//	}

}
